/*
 * @Author: 袁文帅
 * @Date: 2021-02-22 19:00:13
 * @LastEditTime: 2021-02-23 10:35:22
 * @LastEditors: last update your name
 * @人生亦有命，安能行叹复坐愁
 */
import React, { Component } from 'react'
import context from "../utils/context"
export default class provider extends Component {
    constructor(props){
        // 将父组件this绑定在子组件  继承父组件的this
        super(props)
        this.state={
            store: {
                ...props.store
            }
        }
    }
    // 改变数据方法
    dispatch=({type,data})=>{
        // 切割数组
        let [reducerParams,key] = type.split('/')
        // 修改元素  重新渲染视图
        this.setState({
            store:{
                ...this.state.store,
                [reducerParams]:{
                    ...this.state.store[reducerParams],
                    [key]:data
                }
            }
        })
    }

    // 数据
    getState= () =>{
        return {
            ...this.state.store
        }
    }

    // 模拟thunk解决异步请求
    fakeDsipatch =(action)=> {
        if (typeof action === 'function'){
            action(this.fakeDsipatch,this.getState)
        }else {
            this.dispatch(action)
        }
    }
    

    render() {
        return (
            <div>
                {/* 利用跨级传参  高阶函数将数据传递下去 */}
                <context.Provider value={{store:{...this.state.store},dispatch:this.fakeDsipatch}}>
                {
                    // 展示所有子组件
                    this.props.children
                }
                </context.Provider>
            </div>
        )
    }
}
